// miniprogram/pages/chapter/chapter.js
const api=require("../../utils/api")
Page({

  /**
   * 页面的初始数据
   */
  data: {
    flag:false,
    uid:"",
    loading:false,//加载中
    isChapter:true,
    error:false,
    state:false,
    isNewOrOld:1,//新版，旧版
    isIos:false,//是否为ios
    learningPro:0,//学习进度
    courses:[],//课程列表
    totalTimeLength:[0,0],//总学时
    totalWatchTimeLength:[0,0],//已学
    newModule:-1,//最新版
    oldModule:-1,//上期版
    type:-1,//当前选择的module
    isPremission:false
  },
  // 获取手机品牌
  getPhoneBrand:function(){
    const phoneBrand = wx.getSystemInfoSync().system;
    //正则
    const rex=/iOS/;
    if(rex.test(phoneBrand)){
      this.setData({
        isIos:true
      })
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.stopPullDownRefresh()
    wx.showLoading({
      title: '加载中',
    })
    //验证是否登录，改变state值
    this.verifyUser();
    if(!this.verifyCourse()){this.setData({isChapter:false});return ;};
    wx.setNavigationBarTitle({
      title:wx.getStorageSync('COURSEINFO').title
    })

    //获取课程模块
    this.getModule();
    //获取手机品牌
    this.getPhoneBrand();

  },
  //获取模块
   getModule:async function(){
    const courseinfo=wx.getStorageSync('COURSEINFO');
    const market=getApp().globalData.market;
    console.log("%c章节课模块","color:red;font-size:15px")
    const data=await api.sendPostsSync('/video/getKnowPointVideoModuleList',{courseid:courseinfo.id,market})
                        .catch((res)=>{this.setData({isChapter:false});return res;})
      //判断请求是否成功，是否有章节课课程，如果不是显示没有内容
      if(!parseInt(data.errcode) && data.list.length>0){
        data.list.forEach(item => {
          if(item.term==1){
            this.setData({
              newModule:item.module,
              type:item.module,
            })
          }
          if(item.term==2){
           this.setData({
            oldModule:item.module,
           })
          }
        });
        //如果上面的循环没有得到一个type，有可能不存在当期版，存在往期版
        if(this.data.type==-1 && this.data.oldModule!=-1){
          this.setData({
            type:this.data.oldModule,
            isNewOrOld:2
          })
        }
        //如果上面走完，type还是没有值，说明没有内容
        if(this.data.type==-1){
          this.setData({
            isChapter:false
          })
          wx.hideLoading()
          return;
        }
        wx.hideLoading()
        //获取课程列表
        this.getData();
        
      }else{
        this.setData({
          error:true,
          isChapter:false
        })
        wx.hideLoading()
      }
  },
  //获取章节课数据
  getData:async function(){
    this.verifyUser();
    wx.showLoading({
      title: '加载中',
    })
    const userdata=wx.getStorageSync('USERDATA');
    const courseinfo=wx.getStorageSync('COURSEINFO');
    const {sessionid,uid}=userdata;
    //存放uid，因为最开始进来，加载章节课是不需要登录的，是一个游客账号，如果后面登录，通过判断uid是否一样来重新渲染界面
    this.setData({
      uid
    })
    const courseid=courseinfo.id;
    const type=this.data.type;
    console.log("%c章节课","color:red;font-size:15px")
    const data=await api.sendPostsSync('/video/getvideolist',{sessionid,uid,courseid,type})
                        .catch((res)=>{this.setData({isChapter:false}); return res;})
       // 请求成功 ，课程列表不为空 ，如果
      if(data.errcode==0 && data.list.length>0){
        //进度条
        this.getLearning(data.totalWatchTimeLength,data.totalTimeLength)
        //课程列表
        this.setData({
          courses:data.list,
          loading:true
        })
        //计算总学时，已学
        this.getTimeLength(data.totalWatchTimeLength,data.totalTimeLength);
       
      }else{
        this.setData({
          error:true,
          isChapter:false
        })
        wx.hideLoading()
                  
      }   
  },
  //验证是否登录
  verifyUser:function(){
    const userinfo=wx.getStorageSync('USERINFO');
    if(userinfo && userinfo!="" && userinfo!={} ){
      this.setData({
        //登录
        state:true
      })
      return
    }
    return ;
  },
  verifyCourse:function(){
    const courseinfo=wx.getStorageSync('COURSEINFO');
    //判断是否选课
    if(!courseinfo){
      wx.hideLoading();
      wx.showModal({
        title: '提示',
        content: '请先选择课程~',
        confirmText: "去选择",
        success (res) {
          if (res.confirm) {
            wx.reLaunch({
              url: '/group_admin/pages/subject/subject',
            })
          }else if (res.cancel) {
            wx.navigateBack({
              delta: 1
            })
          }
        }
      })
      return false;
    }
    return true;
  },
//计算总学时，已学
  getTimeLength:function(totalWatchTimeLength,totalTimeLength){
    var totalWatchTimeLength=getTime(totalWatchTimeLength);
    var totalTimeLength=getTime(totalTimeLength);
    function getTime(t){
      var time=parseInt(t/60/60);
      var minute=parseInt((t/60/60-time)*60);
      return [time,minute];
    }
    this.setData({
      totalTimeLength,
      totalWatchTimeLength
    })

       this.drawCircle();
    wx.hideLoading()
  },
  // 获取进度条，并画出进度条
  getLearning:function(totalWatchTimeLength,totalTimeLength){
    var pro=(parseInt(totalWatchTimeLength))/parseInt(totalTimeLength).toFixed(3)
    pro=Math.ceil(pro*100)/100;
    this.setData({
      learningPro:pro
    })
    var sdep=this.data.learningPro;
    // this.drawCircle(sdep);
  },

  // 胶囊选项实现
  newChangeOld:function(e){
    const index=e.currentTarget.dataset['index']
    if(index==1){
      //最新版
      if(this.data.isNewOrOld!=1){
        this.setData({
          isNewOrOld:1,
          type:this.data.newModule
        })
      }else{
        return ;
      }
    }else{
      //上期版
      if(this.data.oldModule!=-1){
        this.setData({
          isNewOrOld:2,
          type:this.data.oldModule
        })
      }else{
        wx.showToast({
          title: '本课程没有上期版~',
          icon: 'none',
          duration: 2000
         })
        setTimeout(function(){
          wx.hideToast()
        },2000)
        return;
      }
    }
    this.getData();
  },
  drawCircle: function (step){  
    step=0.4
    var s=0.5;
    step+=s;
    // var s=step;
    var rpx;
    //获取屏幕宽度，获取自适应单位
    wx.getSystemInfo({
      success: function(res) {
        rpx = res.windowWidth/375;
      },
    })
    var context = wx.createCanvasContext('canvasProgress',this);
      // 设置渐变
      var gradient = context.createLinearGradient(200, 100, 100, 200);
      gradient.addColorStop("0", "#FECC34");
      gradient.addColorStop("1.0", "#F8A82F");
      var v=-0.5
      var h=0.5
    var timer=setInterval(()=>{
     if(s<step||h<1.5||v<1){

        context.beginPath()
        context.setLineWidth(7);
        context.setStrokeStyle("#ECECEC");
        context.setLineCap('round')
        context.arc(60*rpx, 60*rpx, 40*rpx, -0.5*Math.PI, v * Math.PI , false);
        context.stroke(); 

        context.beginPath()
        context.setLineWidth(7);
        context.setStrokeStyle("#ECECEC");
        context.setLineCap('round')
        context.arc(60*rpx, 60*rpx, 40*rpx, 0.5*Math.PI, h * Math.PI , false);
        context.stroke(); 
      
        context.setLineWidth(7);
        context.setStrokeStyle(gradient);
        context.setLineCap('round')
        context.beginPath()
        context.arc(60*rpx, 60*rpx, 40*rpx, 0.5*Math.PI, s * Math.PI , false);
        context.stroke(); 

      
        context.draw()
     }else{
       clearInterval(timer)
     }
     if(s<step)
       s+=0.04;
     if(v<1)
       v+=0.04;
     if(h<1.5)
       h+=0.04;
    },50)
  },
  changePremission:function(e){
    wx.hideTabBar()
    this.setData({
      isPremission:e.detail
    })
  },







  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    const userdata=wx.getStorageSync('USERDATA');
    if(this.data.uid!=""&&this.data.uid!=userdata.uid){
      this.onLoad();
    }

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.onLoad();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})